﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public partial class FrmCondicionesDeVenta : Form
    {
        Acciones _accionActual;
        int _idCondicionSeleccionada;

        public FrmCondicionesDeVenta()
        {
            InitializeComponent();
            
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        }
        
        public CondicionVenta CondicionSeleccionada
        {
            get
            {
                CondicionVenta seleccionada = null;

                if (dgvCondiciones.SelectedRows.Count > 0)
                {
                    int idCondicion = (int)dgvCondiciones.SelectedRows[0].Cells["IdCondicionVenta"].Value;
                    BLLCondicionVenta bllCondicion = new BLLCondicionVenta();

                    seleccionada = bllCondicion.TraerCondicion(idCondicion);
                }

                return seleccionada;
            }
        }


        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void CargarGrilla()
        {
            BLLCondicionVenta bllCondicion = new BLLCondicionVenta();
            
            dgvCondiciones.DataSource = (from c in bllCondicion.TraerCondiciones(txtBuscar.Text)
                                         select new
                                         {
                                             IdCondicionVenta = c.IdCondicionVenta,
                                             Nombre = c.Nombre
                                         }).ToList();
        }

        private void SeleccionarAccion()
        {
            switch (_accionActual)
            {
                case Acciones.alta:
                    this.Text = "Nueva Condicion";
                    //btnGuardar.Text = "Guardar nuevo";
                    btnAgregar.Enabled = false;
                    btnEditar.Enabled = true;
                    btnRemover.Enabled = true;

                    txtCondicionDeVenta.Enabled = true;
                    break;

                case Acciones.modificacion:
                    this.Text = "Modificar Condicion";
                    //btnGuardar.Text = "Guardar cambios";
                    btnEditar.Enabled = false;
                    btnRemover.Enabled = true;
                    btnAgregar.Enabled = true;

                    txtCondicionDeVenta.Enabled = true;
                    break;
                default:
                    break;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorCondiciones);
            estaOK = Utilidades.ValidarDatos(this, errorCondiciones);

            return estaOK;
        }

        private void CargarDatosSeleccionados()
        {
            DataGridViewRow filaSeleccionada;

            if (dgvCondiciones.SelectedRows.Count > 0 && _accionActual != Acciones.alta)
            {
                filaSeleccionada = dgvCondiciones.SelectedRows[0];

                CondicionVenta miCondicionVta = CondicionSeleccionada;

                _idCondicionSeleccionada = (int)miCondicionVta.IdCondicionVenta;
                txtCondicionDeVenta.Text = miCondicionVta.Nombre;
            }
        }


        private void FrmCondicionesDeVenta_Load(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            txtCondicionDeVenta.Text = "";
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            CondicionVenta condicion = CondicionSeleccionada;

            if (MessageBox.Show(string.Format("¿Eliminar condición de venta {0}?", condicion.Nombre), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLCondicionVenta bllCondicion = new BLLCondicionVenta();

                try
                {
                    bllCondicion.EliminarCondicion(condicion);
                }
                catch (BLLMagiPackException ex)
                {
                    MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                
                CargarGrilla();
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            CargarDatosSeleccionados();
            SeleccionarAccion();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            BLLCondicionVenta bllCondiciones = new BLLCondicionVenta();

            try
            {
                if (ValidarDatos())
                {
                    CondicionVenta miCondicionVta = new CondicionVenta();
                    miCondicionVta.IdCondicionVenta = _idCondicionSeleccionada;
                    miCondicionVta.Nombre = txtCondicionDeVenta.Text;

                    switch (_accionActual)
                    {
                        case Acciones.alta:
                            bllCondiciones.CrearCondicionVenta(miCondicionVta);
                            miCondicionVta = null;
                            txtCondicionDeVenta.Text = string.Empty;
                            break;
                        case Acciones.modificacion:
                            bllCondiciones.ModificarCondicionVenta(miCondicionVta);
                            break;
                        default:
                            break;
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarGrilla();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void dgvCondiciones_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvCondiciones.SelectedRows.Count > 0;
        }
    }    

}
